package cn.me.alphamq.common.constant;

/**
 * 全局常量
 *
 * @author f
 */
public class GlobalConstant {

    /**
     * AlphaMQ 的基础目录名称，定义在系统的环境变量中
     */
    public static final String ALPHA_MQ_HOME = "ALPHA_MQ_HOME";

    /**
     * msg 中的魔数对应的数字
     */
    public static final short MAGIC_NUM = 8613;

    /**
     * 服务实例 向 nameserver 发送心跳包的间隔时间，单位：ms
     */
    public static final int SERVICE_HEART_BEAT_TIME_STEP = 3000;

    /**
     * 集群之间发送心跳包的间隔时间，单位：ms
     * TODO 如果集群的节点不需要发送心跳包，则删除此常量
     */
    public static final int CLUSTER_HEART_BEAT_TIME_STEP = 3000;

    /**
     * channel 上下文的 attr 中用于唯一表示服务实例的字段名称
     */
    public static final String CTX_ATTR_NAME = "identification";

    /**
     * 默认创建的重试 topic 的队列数为 2
     */
    public static final int DEFAULT_RETRY_QUEUE_SIZE = 2;

    /**
     * 默认的队列 id 为 -1
     */
    public static final int DEFAULT_QUEUE_ID = -1;

    /**
     * 时间轮支持的最大延迟时间为 1h（单位：s）
     */
    public static final int MAX_DELAY_TIME = 60 * 60;

    /**
     * 超出时间轮支持的最大延迟时间时提示的错误信息
     */
    public static final String INCORRECT_DELAY_TIME_MSG =
            "delay time should in range 1 to " + GlobalConstant.MAX_DELAY_TIME;

    /**
     * broker 存在数据时，消费的时间间隔，单位：ms，默认为 100ms
     */
    public static final int EXIST_DATA_TIME_STEP = 100;

    /**
     * broker 不存在数据时，消费的时间间隔，单位：ms，默认为 1000ms
     */
    public static final int NON_EXIST_DATA_TIME_STEP = 1000;

    /**
     * 存储 CommitLog 消息的目录路径（只有后半段，需要和 ALPHA_MQ_HOME 一起使用）
     *
     * @see cn.me.alphamq.common.constant.GlobalConstant
     */
    public static final String COMMIT_LOG_DIR = "commitlog/";

    /**
     * 存储 ConsumeQueue 索引的目录路径（只有后半段，需要和 ALPHA_MQ_HOME 一起使用）
     *
     * @see cn.me.alphamq.common.constant.GlobalConstant
     */
    public static final String CONSUME_QUEUE_DIR = "consumequeue/";
}
